[2025-07-10] Cookie-Session
🦥 본문
Cookie
정의
웹 서버가 브라우저에 저장하는 데이터. Key-value 형태로 이루어져 있다.
HTTP 특징
- Connectionless : 하나의 요청에 하나의 응답을 한 후 연결을 종료.
- Stateless : 통신이 끝난 후 상태 정보를 저장하지 않음
목적
HTTP의 특징으로 인해 서버가 사용자를 기억하지 못하기 때문에 사용한다. 사용자 정보를 브라우저에 저장하여 다음 통신 때 자동으로 다시 보내줌. 클라이언트를 기억하고 식별할 수 있다.
※ 쿠키가 필요 없는 요청일 때에도 쿠키를 보내기 때문에 리소스가 낭비될 수 있다 → Modern Storage APIs를 통해 데이터를 저장하는 방식을 권장하고 있다.
동작 흐름
- 사용자가 로그인 시, 서버에서 쿠키를 설정하여 보냄
- 브라우저는 이 쿠키를 저장
- 다음 요청부터는 자동으로 쿠키 포함
- 서버에서 쿠키를 통해 클라이언트 식별
구성 요소
항목 | 설명 |
---|---|
이름 (Name) | 쿠키의 키 |
값 (Value) | 저장할 실제 값 |
도메인 (Domain) | 쿠키가 적용될 사이트 범위 |
경로 (Path) | 쿠키가 유효한 URL 경로 |
유효기간 (Expires/Max-Age) | 언제까지 유지될지 |
보안 옵션 | Secure , HttpOnly , SameSite 등 |
※ 서버가 별다른 검증하지 않는 경우 쿠키를 변조하여 서버에 요청하여 정보를 탈취할 수 있다.
쿠키 설정
서버 : HTTP 응답 헤더 내 쿠키 설정 헤더(Set-Cookie)를 추가하여 쿠키 설정
HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: name=test;
Set-Cookie: age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;
...
클라이언트 : JS를 통해 쿠키 설정
document.cookie = "name=test;"
document.cookie = "age=30; Expires=Fri, 30 Sep 2022 14:54:50 GMT;"
Session
사용자와 서버 간의 연결 상태를 일정 시간 동안 유지하기 위한 서버 측 저장 공간
목적
HTTP의 특징으로 인해 서버가 사용자를 기억하지 못하기 때문에 사용한다.
동작 흐름
- 사용자가 로그인 시, 세션을 생성
- 세션에 고유 ID를 부여하고 이 ID를 쿠키로 사용자에게 전달
- 이후 요청마다 브라우저가 이 세션 ID를 자동으로 보냄
- ID를 통해 클라이언트 식별
※ 세션 하이재킹 : 쿠키를 훔치는 경우 세션 ID도 훔치기 때문에 정보가 탈취될 수 있다.
세션 vs 쿠키 차이
항목 | 쿠키 | 세션 |
---|---|---|
저장 위치 | 클라이언트(브라우저) | 서버 |
저장 용량 | 작음 (4KB 정도) | 큼 (서버 메모리/DB에 따라 다름) |
보안성 | 비교적 낮음 (조작 가능) | 비교적 높음 (서버 관리) |
유지 방법 | 클라이언트가 직접 보관 | 세션 ID만 브라우저에 저장, 실제 데이터는 서버에 저장 |
자동 전송 | HTTP 요청 시 자동 전송 | 세션 ID가 쿠키로 전송됨 |
Leave a comment